webSocket简介
webSocket是ajax轮询与long pull方式的改进。ajax轮询:每隔一段时间请求一次,不管有没有新信息;long pull:每次请求之后,等到有新信息才会返回;webSocket:客户端发送一次请求之后,只要有新信息,服务器就会主动把数据推送过去。
效果截图
参考了网上的例子来实现聊天室,实验楼的那个不错!但是,打开两个页面却不能真正的聊天,后面参考Tomcat下的ChatAnnotation.java综合两者,才有了这个聊天室。
效果图1:
效果图2:
增加代码
后台代码增加以下几点:
- 1、在会话打开时,将对应的session添加到对应map中;
- 2、当发送消息时,遍历整个map,然后对每个session发送消息;
- 3、关闭时,将对应的session从map中删除,不再接收消息,并且如果此用户有发送过消息,系统将提示该用户已下线
1 | /** |
遇到的问题
在Maven项目中,由于web.xml申明的web-app是2.3版本的,不支持JSP内置对象,需要进行web.xml申明为:1
2
3
4
5
6<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
然后再JSP页面加上:1
<%@ page isELIgnored="false" %>
项目下载地址
https://github.com/yuechang/webSocket.git
博文参考:
- http://zhihu.com/question/20215561/answer/40316953
- http://shiyanlou.iteye.com/blog/2182565
- apache-tomcat-7.0.63\webapps\examples\WEB-INF\classes\websocket\chat\ChatAnnotation.java